home *** CD-ROM | disk | FTP | other *** search
/ User's Choice Windows CD / User's Choice Windows CD (CMS Software)(1993).iso / utility3 / jfklib.zip / MDICHILD.CPP < prev    next >
Text File  |  1991-05-11  |  5KB  |  253 lines

  1. /*
  2.     MDICHILD.CPP - (C) 1990 by Joachim Kainz 'On a mission from Bhudda'
  3. */
  4.     #include "mdi.hpp"
  5.     #include <string.h>
  6.  
  7.     EXPORT MDICHILD::MDICHILD (
  8.                 LPSTR lpName,
  9.                 HICON hIcon,
  10.                 int      x,
  11.                 int      y,
  12.                 int      cx,
  13.                 int      cy,
  14.                 long  lStyle,
  15.                 long  lParam,
  16.                 LPSTR lpClass
  17.     ) : WINDOW (
  18.             CS_VREDRAW | CS_HREDRAW,
  19.             LoadCursor (NULL, IDC_ARROW),
  20.             hIcon,
  21.             COLOR_WINDOW+1,
  22.             0,
  23.             0,
  24.             lpClass,
  25.             DefMDIChildProc
  26.         )
  27.     {
  28.         MDICREATESTRUCT mdi;
  29.         LPSTR            lpTitle;
  30.  
  31.         if (HIWORD (lpName))
  32.             lpTitle = _fstrdup (lpName);
  33.  
  34.         else
  35.             for (WORD wLen=64;; wLen*=2) {
  36.  
  37.                 lpTitle = new char [wLen];
  38.  
  39.                 if (
  40.                     LoadString (
  41.                         GetInstance (),
  42.                         LOWORD (lpName),
  43.                         lpTitle,
  44.                         wLen
  45.                     ) < wLen-1
  46.                 )
  47.                     break;
  48.  
  49.                 delete lpTitle;
  50.  
  51.             }
  52.  
  53.         mdi.szClass    = lpClass;
  54.         mdi.szTitle    = lpTitle;
  55.         mdi.hOwner    = GetInstance ();
  56.         mdi.x        = x;
  57.         mdi.y        = y;
  58.         mdi.cx        = cx;
  59.         mdi.cy        = cy;
  60.         mdi.style    = lStyle;
  61.         mdi.lParam    = lParam;
  62.  
  63.         hWnd = (HWND) ::SendMessage (
  64.                             MDI::GetMDIClient (),
  65.                             WM_MDICREATE,
  66.                             NULL,
  67.                             (long) &mdi
  68.                       );
  69.  
  70.         delete lpTitle;
  71.  
  72.         if (!GetWindowHandle ())
  73.             return;
  74.  
  75.         SetWindowLong (GetWindowHandle (), 0, (long) this);
  76.  
  77.         lpDefWndProc =
  78.                (FARPROC2) SetWindowLong (
  79.                             GetWindowHandle (),
  80.                             GWL_WNDPROC,
  81.                             (long) GetOOPWndProc ()
  82.                           );
  83.  
  84.         SendMessage (self, WM_CREATE, NULL,    (long) &mdi);
  85.     }
  86.  
  87.     METHOD MDICHILD::WMChildActivate ()
  88.     {
  89.         return DefMDIChildProc (
  90.                     GetWindowHandle (),
  91.                     WM_CHILDACTIVATE,
  92.                     NULL,
  93.                     0l
  94.                );
  95.     }
  96.  
  97.     METHOD MDICHILD::WMMove    (POINT pt)
  98.     {
  99.         return DefMDIChildProc (
  100.                 GetWindowHandle (),
  101.                 WM_MOVE,
  102.                 NULL,
  103.                 *(long *) &pt
  104.                );
  105.     }
  106.  
  107.     METHOD MDICHILD::WMGetMinMaxInfo (LPRECT lprt)
  108.     {
  109.         return DefMDIChildProc (
  110.                 GetWindowHandle (),
  111.                 WM_GETMINMAXINFO,
  112.                 NULL,
  113.                 (long) lprt
  114.                );
  115.     }
  116.  
  117.     METHOD MDICHILD::WMMenuChar (WORD wKey, HMENU hMenu, WORD wMenu)
  118.     {
  119.         return DefMDIChildProc (
  120.                 GetWindowHandle (),
  121.                 WM_MENUCHAR,
  122.                 wKey,
  123.                 MAKELONG (wMenu, hMenu)
  124.                );
  125.     }
  126.  
  127.     METHOD MDICHILD::WMSetFocus (HWND hLast)
  128.     {
  129.         return DefMDIChildProc (GetWindowHandle (), WM_SETFOCUS, hLast, 0l);
  130.     }
  131.  
  132.     METHOD MDICHILD::WMSize (WORD wSizing, int nWidth, int nHeigth)
  133.     {
  134.         return DefMDIChildProc (
  135.                 GetWindowHandle (),
  136.                 WM_SIZE,
  137.                 wSizing,
  138.                 MAKELONG (nWidth, nHeigth)
  139.                );
  140.     }
  141.  
  142.     METHOD MDICHILD::WndMdiProc (WORD wMsg, WORD wParam, long lParam)
  143.     {
  144.         switch (wMsg) {
  145.  
  146.           case WM_PARENTNOTIFY:
  147.             return WMParentNotify (
  148.                     HIWORD (lParam),
  149.                     wParam,
  150.                     LOWORD (lParam)
  151.                    );
  152.  
  153.           case WM_MDIACTIVATE:
  154.             return WMMDIActivate (
  155.                     wParam,
  156.                     HIWORD (lParam),
  157.                     LOWORD (lParam)
  158.                    );
  159.  
  160.         }
  161.  
  162.         return DefMDIChildProc (GetWindowHandle (),    wMsg, wParam, lParam);
  163.     }
  164.  
  165.     METHOD MDICHILD::WndDlgProc (WORD wMsg, WORD wParam, long lParam)
  166.     {
  167.         switch (wMsg) {
  168.  
  169.           case WM_COMMAND:
  170.             return WMCommand (
  171.                         wParam,
  172.                         HIWORD (lParam),
  173.                         LOWORD (lParam)
  174.                    );
  175.  
  176.           case WM_SYSCOMMAND:
  177.             return WMSysCommand (wParam, MAKEPOINT (lParam));
  178.  
  179.           case WM_TIMER:
  180.             return WMTimer (wParam, (FARPROC) lParam);
  181.  
  182.           case WM_HSCROLL:
  183.             return WMHScroll (wParam, HIWORD (lParam));
  184.  
  185.           case WM_VSCROLL:
  186.             return WMVScroll (wParam, HIWORD (lParam));
  187.  
  188.           case WM_INITMENU:
  189.             return WMInitMenu (wParam);
  190.  
  191.           case WM_INITDIALOG:
  192.             return WMInitDialog (lParam);
  193.  
  194.           case WM_INITMENUPOPUP:
  195.             return WMInitMenuPopUp    (
  196.                         wParam,
  197.                         LOWORD (lParam),
  198.                         HIWORD (lParam)
  199.                      );
  200.  
  201.           case WM_MENUSELECT:
  202.             return WMMenuSelect (wParam, LOWORD (lParam));
  203.  
  204.           case WM_MENUCHAR:
  205.             return WMMenuChar (
  206.                         wParam,
  207.                         HIWORD (lParam),
  208.                         LOWORD (lParam)
  209.                    );
  210.  
  211.           case WM_ENTERIDLE:
  212.             return WMEnterIdle (wParam, LOWORD (lParam));
  213.  
  214.         }
  215.  
  216.         return DefMDIChildProc (GetWindowHandle (),    wMsg, wParam, lParam);
  217.     }
  218.  
  219.     METHOD MDICHILD::WMSysCommand    (WORD wID, POINT pt)
  220.     {
  221.         return DefMDIChildProc (
  222.                 GetWindowHandle (),
  223.                 WM_SYSCOMMAND,
  224.                 wID,
  225.                 *(long*)&pt
  226.                );
  227.     };
  228.  
  229.     METHOD MDICHILD::WMSetText(LPSTR lpText)
  230.     {
  231.         return DefMDIChildProc(GetWindowHandle (), WM_SETTEXT, NULL, (long) lpText);
  232.     }
  233.  
  234.     METHOD MDICHILD::WMMenuSelect (WORD wMenu, WORD wFlag)
  235.     {
  236.         return DefMDIChildProc(
  237.                 GetWindowHandle (),
  238.                 WM_MENUSELECT,
  239.                 wMenu,
  240.                 MAKELONG (wFlag, NULL)
  241.                );
  242.     }
  243.  
  244.     METHOD MDICHILD::WMClose ()
  245.     {
  246.         return SendMessage (
  247.                 MDI::GetMDIClient (),
  248.                 WM_MDIDESTROY,
  249.                 GetWindowHandle (),
  250.                 0l
  251.                );
  252.     }
  253.